package com.qsd.TeacherSystem.Service;

import com.qsd.common.enums.ResultStatus;
import com.qsd.common.po.Discussion;
import com.qsd.common.po.FullInTheBlank;
import com.qsd.common.po.Judgment;
import com.qsd.common.po.MultipleChoice;
import com.qsd.common.po.OneChoice;
import com.qsd.common.po.Paper;
import com.qsd.common.pojo.PaperEntity;
import com.qsd.common.util.PageUtil;
import com.qsd.common.vo.PageVo;

import java.util.List;

public interface PaperService {

    /**
     * 查询属于当前课程的试卷
     *
     * @param id 课程ID
     */
    PageVo<Paper> all(Integer id);

    /**
     * 查询教师创建的全部试卷
     *
     * @param page     页码
     * @param limit    每页数目
     * @param username 教师用户名
     */
    PageVo<Paper> papers(int page, int limit, String username);

    /**
     * 教师增加一个试卷
     *
     * @param paper    试卷信息
     * @param username 教师用户名
     */
    ResultStatus add(Paper paper, String username);

    /**
     * 修改试卷信息
     *
     * @param paper 试卷信息
     */
    ResultStatus update(Paper paper);

    /**
     * 通过试卷ID查询试卷信息
     *
     * @param id 试卷ID
     * @return 试卷详细信息
     */
    Paper queryPaperById(Integer id);

    /**
     * 删除题目
     *
     * @param type 题目类型
     * @param id   题目的ID
     */
    ResultStatus delete(String type, Integer id);

    /**
     * 新增单项选择题
     */
    ResultStatus addOneChoice(OneChoice oneChoice);

    /**
     * 新增多项选择题
     */
    ResultStatus addMultipleChoice(MultipleChoice multipleChoice);

    /**
     * 新增判断题
     */
    ResultStatus addJudgment(Judgment judgment);

    /**
     * 新增填空题
     */
    ResultStatus addFullInTheBlank(FullInTheBlank fullInTheBlank);

    /**
     * 新增简答题
     */
    ResultStatus addDiscussion(Discussion discussion);

    /**
     * 删除试卷
     *
     * @param id
     * @return
     */
    ResultStatus deletePage(Integer id);

    List<PaperEntity> paperList2(Paper grade, PageUtil page);

    /**
     * 自动组卷
     * @param paperId
     * @return
     */
    Paper queryPaperById2(Integer paperId);

    PageVo<Paper> papers2(int page, int limit, String username);
}
